<!DOCTYPE html>
<html lang="zh-CN">
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <meta name="robots" content="noodp" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1">
        <title>使用 colab 安装 rclone 以及搭建 gd_utils - NeverLand</title><meta name="Description" content="无需服务器转存谷歌硬盘的分享文件."><meta property="og:title" content="使用 colab 安装 rclone 以及搭建 gd_utils" />
<meta property="og:description" content="无需服务器转存谷歌硬盘的分享文件." />
<meta property="og:type" content="article" />
<meta property="og:url" content="https://lucas-0.github.io/2020-07-09-colab-gd_utils/" />
<meta property="og:image" content="https://lucas-0.github.io/images/island.svg"/>
<meta property="article:published_time" content="2020-07-09T00:40:26+08:00" />
<meta property="article:modified_time" content="2020-09-23T15:51:49+08:00" />
<meta name="twitter:card" content="summary_large_image"/>
<meta name="twitter:image" content="https://lucas-0.github.io/images/island.svg"/>

<meta name="twitter:title" content="使用 colab 安装 rclone 以及搭建 gd_utils"/>
<meta name="twitter:description" content="无需服务器转存谷歌硬盘的分享文件."/>
<meta name="application-name" content="NeverLand">
<meta name="apple-mobile-web-app-title" content="NeverLand"><meta name="theme-color" content="#ffffff"><meta name="msapplication-TileColor" content="#da532c"><link rel="canonical" href="https://lucas-0.github.io/2020-07-09-colab-gd_utils/" /><link rel="prev" href="https://lucas-0.github.io/2020-07-05-id-invaded/" /><link rel="next" href="https://lucas-0.github.io/2020-08-14-homecoming/" /><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/normalize.css@8.0.1/normalize.min.css"><link rel="stylesheet" href="/css/style.min.css"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@5.13.0/css/all.min.css"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/animate.css@3.7.2/animate.min.css"><script type="application/ld+json">
    {
        "@context": "http://schema.org",
        "@type": "BlogPosting",
        "headline": "使用 colab 安装 rclone 以及搭建 gd_utils",
        "inLanguage": "zh-CN",
        "mainEntityOfPage": {
            "@type": "WebPage",
            "@id": "https:\/\/lucas-0.github.io\/2020-07-09-colab-gd_utils\/"
        },"image": [{
                            "@type": "ImageObject",
                            "url": "https:\/\/lucas-0.github.io\/images\/Apple-Devices-Preview.png",
                            "width":  3200 ,
                            "height":  2048 
                        }],"genre": "posts","keywords": "colab, google drive, rclone","wordcount":  1426 ,
        "url": "https:\/\/lucas-0.github.io\/2020-07-09-colab-gd_utils\/","datePublished": "2020-07-09T00:40:26+08:00","dateModified": "2020-09-23T15:51:49+08:00","license": "This work is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.","publisher": {
            "@type": "Organization",
            "name": "Lucas","logo": {
                    "@type": "ImageObject",
                    "url": "https:\/\/lucas-0.github.io\/images\/avatar.png",
                    "width":  925 ,
                    "height":  925 
                }},"author": {
                "@type": "Person",
                "name": "Lucas"
            },"description": "无需服务器转存谷歌硬盘的分享文件."
    }
    </script></head>
    <body header-desktop="fixed" header-mobile="auto"><script type="text/javascript">(window.localStorage && localStorage.getItem('theme') ? localStorage.getItem('theme') === 'dark' : ('auto' === 'auto' ? window.matchMedia('(prefers-color-scheme: dark)').matches : 'auto' === 'dark')) && document.body.setAttribute('theme', 'dark');</script>

        <div id="mask"></div><div class="wrapper"><header class="desktop" id="header-desktop">
    <div class="header-wrapper">
        <div class="header-title">
            <a href="/" title="NeverLand"><img
        class="lazyload logo"
        src="/svg/loading.min.svg"
        data-src="/images/myicon.svg"
        data-srcset="/images/myicon.svg, /images/myicon.svg 1.5x, /images/myicon.svg 2x"
        data-sizes="auto"
        alt="/images/myicon.svg"
        title="/images/myicon.svg" />NeverLand<span class="header-title-post"><i class='fas fa-palette'></i></span></a>
        </div>
        <div class="menu">
            <div class="menu-inner"><a class="menu-item" href="/posts/" title="posts"><i class='far fa-folder-open'></i>&nbsp; 文章 </a><a class="menu-item" href="/tags/" title="tags"><i class='fas fa-tags'></i>&nbsp; 标签 </a><a class="menu-item" href="/categories/" title="categories"><i class='fas fa-grip-horizontal'></i>&nbsp; 分类 </a><a class="menu-item" href="/links/" title="links"><i class='fas fa-archive'></i>&nbsp; 展示 </a><a class="menu-item" href="/about/" title="about"><i class='fas fa-portrait'></i>&nbsp; 关于 </a><a class="menu-item" href="https://github.com/Lucas-0" title="GitHub" rel="noopener noreffer" target="_blank"><i class='fab fa-github fa-fw'></i>  </a><span class="menu-item delimiter"></span><span class="menu-item search" id="search-desktop">
                        <input type="text" placeholder="找找好康的?" id="search-input-desktop">
                        <a href="javascript:void(0);" class="search-button search-toggle" id="search-toggle-desktop" title="搜索">
                            <i class="fas fa-search fa-fw"></i>
                        </a>
                        <a href="javascript:void(0);" class="search-button search-clear" id="search-clear-desktop" title="清空">
                            <i class="fas fa-times-circle fa-fw"></i>
                        </a>
                        <span class="search-button search-loading" id="search-loading-desktop">
                            <i class="fas fa-spinner fa-fw fa-spin"></i>
                        </span>
                    </span><a href="javascript:void(0);" class="menu-item theme-switch" title="切换主题">
                    <i class="fas fa-adjust fa-fw"></i>
                </a>
            </div>
        </div>
    </div>
</header><header class="mobile" id="header-mobile">
    <div class="header-container">
        <div class="header-wrapper">
            <div class="header-title">
                <a href="/" title="NeverLand"><img
        class="lazyload logo"
        src="/svg/loading.min.svg"
        data-src="/images/myicon.svg"
        data-srcset="/images/myicon.svg, /images/myicon.svg 1.5x, /images/myicon.svg 2x"
        data-sizes="auto"
        alt="/images/myicon.svg"
        title="/images/myicon.svg" />NeverLand<span class="header-title-post"><i class='fas fa-palette'></i></span></a>
            </div>
            <div class="menu-toggle" id="menu-toggle-mobile">
                <span></span><span></span><span></span>
            </div>
        </div>
        <div class="menu" id="menu-mobile"><div class="search-wrapper">
                    <div class="search mobile" id="search-mobile">
                        <input type="text" placeholder="找找好康的?" id="search-input-mobile">
                        <a href="javascript:void(0);" class="search-button search-toggle" id="search-toggle-mobile" title="搜索">
                            <i class="fas fa-search fa-fw"></i>
                        </a>
                        <a href="javascript:void(0);" class="search-button search-clear" id="search-clear-mobile" title="清空">
                            <i class="fas fa-times-circle fa-fw"></i>
                        </a>
                        <span class="search-button search-loading" id="search-loading-mobile">
                            <i class="fas fa-spinner fa-fw fa-spin"></i>
                        </span>
                    </div>
                    <a href="javascript:void(0);" class="search-cancel" id="search-cancel-mobile">
                        取消
                    </a>
                </div><a class="menu-item" href="/posts/" title="posts"><i class='far fa-folder-open'></i>&nbsp;文章</a><a class="menu-item" href="/tags/" title="tags"><i class='fas fa-tags'></i>&nbsp;标签</a><a class="menu-item" href="/categories/" title="categories"><i class='fas fa-grip-horizontal'></i>&nbsp;分类</a><a class="menu-item" href="/links/" title="links"><i class='fas fa-archive'></i>&nbsp;展示</a><a class="menu-item" href="/about/" title="about"><i class='fas fa-portrait'></i>&nbsp;关于</a><a class="menu-item" href="https://github.com/Lucas-0" title="GitHub" rel="noopener noreffer" target="_blank"><i class='fab fa-github fa-fw'></i></a><a href="javascript:void(0);" class="menu-item theme-switch" title="切换主题">
                <i class="fas fa-adjust fa-fw"></i>
            </a></div>
    </div>
</header>
<div class="search-dropdown desktop">
    <div id="search-dropdown-desktop"></div>
</div>
<div class="search-dropdown mobile">
    <div id="search-dropdown-mobile"></div>
</div>
<main class="main">
                <div class="container"><div class="toc" id="toc-auto">
            <h2 class="toc-title">目录</h2>
            <div class="toc-content" id="toc-content-auto"></div>
        </div><article class="page single"><h1 class="single-title animated flipInX">使用 colab 安装 rclone 以及搭建 gd_utils</h1><div class="post-meta">
            <div class="post-meta-line"><span class="post-author"><a href="https://lucas-0.github.io" title="Author" target="_blank" rel="noopener noreffer author" class="author"><i class="fas fa-user-circle fa-fw"></i>Lucas</a></span>&nbsp;<span class="post-category">收录于 <a href="/categories/%E6%8A%80%E6%9C%AF/"><i class="far fa-folder fa-fw"></i>技术</a></span></div>
            <div class="post-meta-line"><i class="far fa-calendar-alt fa-fw"></i>&nbsp;<time datetime="2020-07-09">2020-07-09</time>&nbsp;<i class="fas fa-pencil-alt fa-fw"></i>&nbsp;约 1426 字&nbsp;
                <i class="far fa-clock fa-fw"></i>&nbsp;预计阅读 3 分钟&nbsp;</div>
        </div><div class="details toc" id="toc-static"  kept="">
                <div class="details-summary toc-title">
                    <span>目录</span>
                    <span><i class="details-icon fas fa-angle-right"></i></span>
                </div>
                <div class="details-content toc-content" id="toc-content-static"><nav id="TableOfContents">
  <ul>
    <li><a href="#创建应用申请-token-optional">创建应用申请 token (optional)</a></li>
    <li><a href="#创建项目获取-service-account">创建项目获取 service account</a></li>
    <li><a href="#搭建-gd_utils">搭建 gd_utils</a></li>
  </ul>
</nav></div>
            </div><div class="content" id="content"><div class="details admonition failure open">
        <div class="details-summary admonition-title">
            <i class="icon fas fa-times-circle fa-fw"></i>内容过期<i class="details-icon fas fa-angle-right fa-fw"></i>
        </div>
        <div class="details-content">
            <div class="admonition-content">由于谷歌对相关接口进行限制，本文内容已失效。</div>
        </div>
    </div>
</br>
</br>
<hr>
<p>有很多患有仓鼠综合征的人喜欢到处收集, 把资源放在谷歌的共享盘中, 这类团队盘名义上不限制容量, 但是文件数量有 40w 的限制, 尽管并不是很严格的在执行. 用来放一些丢了也不心疼的内容不失为一个好方法.</p>
<p>其中有些人会把资源分享出来, 路人获取到资源的分享链接虽然可以查看文件, 然而有下载和播放等的流量限制, 短时间流量过大会触发保护. 由于现在团队盘很容易获取, 转存到自己的团队盘可以间接解决这一问题, 但是有每 24h 750GB 的限制. gd_utils 即是一个解决方案. 项目地址:</p>
<p><a href="https://github.com/iwestlin/gd-utils" target="_blank" rel="noopener noreffer">https://github.com/iwestlin/gd-utils</a></p>
<div class="details admonition note open">
        <div class="details-summary admonition-title">
            <i class="icon fas fa-pencil-alt fa-fw"></i>类似的项目<i class="details-icon fas fa-angle-right fa-fw"></i>
        </div>
        <div class="details-content">
            <div class="admonition-content"><a href="https://github.com/donwa/gclone" target="_blank" rel="noopener noreffer">gclone</a></div>
        </div>
    </div>
<p>原项目需要一个能连接谷歌服务的 VPS , 但是如果没有的话单纯为转存文件租一台并不合算. 借助谷歌的 colab 平台, 可以实现核心功能 ( 而且分配的虚拟机性能秒杀你能租到的 VPS, 毕竟是给机器学习用的 ). 至于 Telegram 的 bot 我并不感兴趣, 所以没有考虑.</p>
</br>
<hr>
<h2 id="创建应用申请-token-optional">创建应用申请 token (optional)</h2>
<p><strong>选做但推荐.</strong></p>
<p>根据下面教程申请 API, 创建应用并获取 <code>client_id</code> 和 <code>client_secret</code>, 然后进入 <a href="https://colab.research.google.com" target="_blank" rel="noopener noreffer">colab</a> 平台.</p>
<p><a href="https://www.moerats.com/archives/1001/" target="_blank" rel="noopener noreffer">GoIndex：一个无需服务器的Google Drive目录索引程序 - Rat&rsquo;s Blog</a></p>
<p>遇到的验证参照下面的链接解决:</p>
<p><a href="http://blog.jialezi.net/?post=153" target="_blank" rel="noopener noreffer">Rclone高级玩法&ndash;利用服务账号突破日流量750G限制 - Jialezi `s blog</a></p>
<p>创建 notebook , 只需要将普通的 bash 命令前加上 <code>!</code> 即可执行. 如下:</p>
</br>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span><span class="lnt">8
</span></code></pre></td>
<td class="lntd">
<pre class="chroma"><code class="language-bash" data-lang="bash"><span class="c1"># 安装依赖</span>
!apt update <span class="o">&amp;&amp;</span> apt install curl unzip -y

<span class="c1"># 安装 rclone</span>
!curl https://rclone.org/install.sh <span class="p">|</span> sudo bash

<span class="c1"># 配置 conf 文件获取 refresh_token, 具体操作有很多写的极为详细的教程</span>
!rclone config
</code></pre></td></tr></table>
</div>
</div><p>然后可以复制输出信息或者下载 rclone.conf 文件, 里面有所需要的全部信息.</p>
</br>
<h2 id="创建项目获取-service-account">创建项目获取 service account</h2>
<p>截至目前网络上所有创建 service account 的方案都是借助 AutoRclone 项目创建的.</p>
<p>项目地址: <a href="https://github.com/xyou365/AutoRclone" target="_blank" rel="noopener noreffer">https://github.com/xyou365/AutoRclone</a></p>
<p>我在 VPS 上完成的这一步, 理论上在 colab 上也能实现. 可参照如下教程新建项目:</p>
<p><a href="https://largesse.12306.recipes/posts/e5e17474.html#%E5%AE%89%E8%A3%85%E8%AF%A6%E7%BB%86%E8%BF%87%E7%A8%8B" target="_blank" rel="noopener noreffer">AutoRclone配合gclone突破GoogleTeamDrive750G流量限制 - Largesse&rsquo;s blog</a></p>
<p><a href="http://fxxkr.com/2020/03/27/autorclone-gclone-googledrive/" target="_blank" rel="noopener noreffer">Use “AutoRclone + gclone” 教程 Copy GoogleDrive Resources Easy – FXXKR LAB</a></p>
<p><a href="https://blog.juchiahau.com/2020/04/gclone-config.html" target="_blank" rel="noopener noreffer">gclone配置教程 - Juch Blog</a></p>
<!--

```bash
# 升级源与安装必备的环境, 注意 colab 需要前缀 !
apt update -y &&　apt upgrade -y
apt install wget curl screen git sudo python3-distutils -y
sudo -i

# 安装 python3 & pip3
apt install python3 python3-pip -y

# 下载并安装 AutoRclone
cd ~
git clone https://github.com/xyou365/AutoRclone && cd AutoRclone && sudo pip3 install -r requirements.txt
```
-->
<p>​</p>
<p>运行下面的命令:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre class="chroma"><code class="language-fallback" data-lang="fallback">cd
cat ~/AutoRclone/accounts/*.json | grep &#34;client_email&#34; | awk &#39;{print $2}&#39;| tr -d &#39;,&#34;&#39; | sed &#39;N;N;N;N;N;N;N;N;N;/^$/d;G&#39; &gt; ~/email.txt
</code></pre></td></tr></table>
</div>
</div><p>在根目录下生成 email.txt 文件便于添加入 group.</p>
<p>推荐创建群组管理这些小号, 如要了解 Shared drive 的限制, 请看下面的官方解释<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>.</p>
<p>​</p>
<h2 id="搭建-gd_utils">搭建 gd_utils</h2>
<p>colab 中执行代码块:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span></code></pre></td>
<td class="lntd">
<pre class="chroma"><code class="language-bash" data-lang="bash">!curl -sL https://deb.nodesource.com/setup_14.x <span class="p">|</span> sudo -E bash -
!apt-get install -y nodejs   <span class="c1"># 安装node.js</span>

!git clone https://github.com/iwestlin/gd-utils  <span class="c1"># 下载gd-utils</span>
%cd gd-utils

!npm install --unsafe-perm<span class="o">=</span><span class="nb">true</span> --allow-root  <span class="c1"># 安装依赖</span>
!apt install pm2
!npm i pm2 -g

<span class="c1"># 然后把 service account 的 json 文件上传到 gd_utils 的 sa 目录下, config.js 修改参数后替换文件, colab 里可以直接双击打开修改保存. 这一步我建议预先把文件传到自己的谷歌硬盘, 运行时从谷歌硬盘复制    </span>

!pm2 start server.js <span class="c1"># 运行 server</span>

!node check.js <span class="c1"># 输出根目录则成功</span>

!./validate-sa.js <span class="o">[</span>target folder<span class="o">]</span> <span class="c1"># 检验 service account 是否都有搬运至目标文件夹的权限, [target folder] 为文件夹的 ID</span>

!./copy -h <span class="c1"># 查看帮助</span>

!./backup-db.js  <span class="c1"># 备份失败的任务进度, 下次可以断点续传</span>
</code></pre></td></tr></table>
</div>
</div><p>最常用的命令应该是在两个文件夹之间拷贝文件:</p>
<p><code>./copy &lt;source id&gt; &lt;target id&gt; -S</code></p>
<p>注意 <code>S</code> 是大写, 意为使用 service account.</p>
<p>搭建 gd_utils 和 gclone 的教程有很多, 所以我写的比较简略; 不过缝合了多个教程, 完全利用 colab 做到无服务器实现, 也算是一点创新之处吧.</p>
<p>一点说明:</p>
<p>根据 gd_utils 项目的作者所说, 谷歌硬盘在拷贝文件时并不是真的创建了一个副本, 而是增加了一个索引.</p>
<blockquote>
<p>首先要明确一下 server side copy（后称ssc） 的原理。</p>
<p>对于 Google Drive 本身而言，它不会因为你ssc复制了一份文件而真的去在自己的文件系统上复制一遍（否则不管它有多大硬盘都会被填满），它只是在数据库里添上了一笔记录。</p>
</blockquote>
<p>所以 Shared drive 之间互相拷贝大文件不会给谷歌的存储造成额外负担, 这一部分的负罪感可以放下.</p>
<p>毕竟有薅羊毛之嫌疑, 请合理使用, 并做好随时失去的心理准备.</p>
<p>​</p>
<p>题外话:</p>
<p><a href="https://github.com/Aicirou/goindex-theme-acrou" target="_blank" rel="noopener noreffer">一个谷歌硬盘的目录索引程序</a></p>
<p>​</p>
<section class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1" role="doc-endnote">
<p><a href="https://support.google.com/a/answer/7338880?hl=zh-Hans" target="_blank" rel="noopener noreffer">共享云端硬盘的限制</a> <a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</section></div><div class="post-footer" id="post-footer">
    <div class="post-info">
        <div class="post-info-line">
            <div class="post-info-mod">
                <span>更新于 2020-09-23&nbsp;<a class="git-hash" href="https://github.com/Lucas-0/Lucas-0.github.io/commit/a7a7af60d5f883f3f81cebf22846683b43c4db45" target="_blank" title="commit by Lucas(raisingsha@gmail.com) a7a7af60d5f883f3f81cebf22846683b43c4db45: update expire info">
                                    <i class="fas fa-hashtag fa-fw"></i>a7a7af6</a></span>
            </div>
            <div class="post-info-license"></div>
        </div>
        <div class="post-info-line">
            <div class="post-info-md"></div>
            <div class="post-info-share">
                <span><a href="javascript:void(0);" title="分享到 Twitter" data-sharer="twitter" data-url="https://lucas-0.github.io/2020-07-09-colab-gd_utils/" data-title="使用 colab 安装 rclone 以及搭建 gd_utils" data-hashtags="colab,google drive,rclone"><i class="fab fa-twitter fa-fw"></i></a><a href="javascript:void(0);" title="分享到 Facebook" data-sharer="facebook" data-url="https://lucas-0.github.io/2020-07-09-colab-gd_utils/" data-hashtag="colab"><i class="fab fa-facebook-square fa-fw"></i></a><a href="javascript:void(0);" title="分享到 Hacker News" data-sharer="hackernews" data-url="https://lucas-0.github.io/2020-07-09-colab-gd_utils/" data-title="使用 colab 安装 rclone 以及搭建 gd_utils"><i class="fab fa-hacker-news fa-fw"></i></a><a href="javascript:void(0);" title="分享到 Line" data-sharer="line" data-url="https://lucas-0.github.io/2020-07-09-colab-gd_utils/" data-title="使用 colab 安装 rclone 以及搭建 gd_utils"><i data-svg-src="https://cdn.jsdelivr.net/npm/simple-icons@2.14.0/icons/line.svg"></i></a><a href="javascript:void(0);" title="分享到 Pocket" data-sharer="pocket" data-url="https://lucas-0.github.io/2020-07-09-colab-gd_utils/"><i class="fab fa-get-pocket fa-fw"></i></a><a href="javascript:void(0);" title="分享到 微博" data-sharer="weibo" data-url="https://lucas-0.github.io/2020-07-09-colab-gd_utils/" data-title="使用 colab 安装 rclone 以及搭建 gd_utils"><i class="fab fa-weibo fa-fw"></i></a></span>
            </div>
        </div>
    </div>

    <div class="post-info-more">
        <section class="post-tags"><i class="fas fa-tags fa-fw"></i>&nbsp;<a href="/tags/colab/">colab</a>,&nbsp;<a href="/tags/google-drive/">google drive</a>,&nbsp;<a href="/tags/rclone/">rclone</a></section>
        <section>
            <span><a href="javascript:void(0);" onclick="window.history.back();">返回</a></span>&nbsp;|&nbsp;<span><a href="/">主页</a></span>
        </section>
    </div>

    <div class="post-nav"><a href="/2020-07-05-id-invaded/" class="prev" rel="prev" title="异度侵入"><i class="fas fa-angle-left fa-fw"></i>异度侵入</a>
            <a href="/2020-08-14-homecoming/" class="next" rel="next" title="不是归来的归来">不是归来的归来<i class="fas fa-angle-right fa-fw"></i></a></div>
</div>
<div id="comments"><div id="utterances"></div><noscript>
                Please enable JavaScript to view the comments powered by <a href="https://utteranc.es/">Utterances</a>.
            </noscript></div></article></div>
            </main><footer class="footer">
        <div class="footer-container"><div class="footer-line"><i class='far fa-smile-wink'></i>&nbsp;有趣之事即是好事</div><div class="footer-line"><i class="far fa-copyright fa-fw"></i><span itemprop="copyrightYear">2020</span><span class="author" itemprop="copyrightHolder">&nbsp;<a href="https://lucas-0.github.io/about/" target="_blank">Lucas</a></span>&nbsp;|&nbsp;<span class="license"><a rel="license external nofollow noopener noreffer" href="https://creativecommons.org/licenses/by-nc/4.0/" target="_blank">CC BY-NC 4.0</a></span><span class="icp-splitter">&nbsp;|&nbsp;</span><br class="icp-br"/>
                    <span class="icp">La vita è bella</span></div>
        </div>
    </footer></div>

        <div id="fixed-buttons"><a href="#" id="back-to-top" class="fixed-button" title="回到顶部">
                <i class="fas fa-arrow-up fa-fw"></i>
            </a><a href="#" id="view-comments" class="fixed-button" title="查看评论">
                <i class="fas fa-comment fa-fw"></i>
            </a>
        </div><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/lightgallery.js@1.2.0/dist/css/lightgallery.min.css"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.11.1/dist/katex.min.css"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.11.1/dist/contrib/copy-tex.min.css"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/cookieconsent@3.1.1/build/cookieconsent.min.css"><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/smooth-scroll@16.1.3/dist/smooth-scroll.min.js"></script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/autocomplete.js@0.37.1/dist/autocomplete.min.js"></script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/algoliasearch@4.2.0/dist/algoliasearch-lite.umd.min.js"></script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/lazysizes@5.2.2/lazysizes.min.js"></script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/lightgallery.js@1.2.0/dist/js/lightgallery.min.js"></script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/lg-thumbnail.js@1.2.0/dist/lg-thumbnail.min.js"></script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/lg-zoom.js@1.2.0/dist/lg-zoom.min.js"></script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/clipboard@2.0.6/dist/clipboard.min.js"></script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/sharer.js@0.4.0/sharer.min.js"></script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/katex@0.11.1/dist/katex.min.js"></script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/katex@0.11.1/dist/contrib/auto-render.min.js"></script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/katex@0.11.1/dist/contrib/copy-tex.min.js"></script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/katex@0.11.1/dist/contrib/mhchem.min.js"></script><script type="text/javascript" src="https://cdn.jsdelivr.net/npm/cookieconsent@3.1.1/build/cookieconsent.min.js"></script><script type="text/javascript">window.config={"code":{"copyTitle":"复制到剪贴板","maxShownLines":15},"comment":{"utterances":{"darkTheme":"github-dark","issueTerm":"title","label":"","lightTheme":"github-light","repo":"Lucas-0/comment"}},"cookieconsent":{"content":{"dismiss":"吼","link":"了解更多","message":"投喂小饼干?"},"enable":true,"palette":{"button":{"background":"#f0f0f0"},"popup":{"background":"#1aa3ff"}},"theme":"edgeless"},"lightGallery":{"actualSize":false,"exThumbImage":"data-thumbnail","hideBarsDelay":2000,"selector":".lightgallery","speed":400,"thumbContHeight":80,"thumbWidth":80,"thumbnail":true},"math":{"delimiters":[{"display":true,"left":"$$","right":"$$"},{"display":true,"left":"\\[","right":"\\]"},{"display":false,"left":"$","right":"$"},{"display":false,"left":"\\(","right":"\\)"}],"strict":false},"search":{"algoliaAppID":"RA4BOTUVZQ","algoliaIndex":"myBlog","algoliaSearchKey":"42c8139aee413081073e99c2f080227d","highlightTag":"em","maxResultLength":10,"noResultsFound":"没有找到结果","snippetLength":50,"type":"algolia"}};</script><script type="text/javascript" src="/js/theme.min.js"></script></body>
</html>
